package com.itany.corejava.code15_stream.zuoye;

import com.itany.corejava.code13_jdbc.DataAccessException;
import com.itany.corejava.code13_jdbc.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年12月18日 9:26
 */

// 1.找出所有员工,并按工资升序排序,打印出员工姓名与工资
// 2.找出所有研发部员工,按照工资降序排序,打印出员工姓名、工资、部门
// 3.找出员工都属于哪些部门
// 4.输出最高工资
// 5.输出最低工资
// 6.输出员工的平均工资
// 7.在每一个员工姓名前加前缀wbs_

public class Test {
    public static void main(String[] args) {
        List<Emp2> emps=queryAll();
        emps.stream().sorted((a,b)->(int)(a.getSalary()-b.getSalary()))
                .forEach(e-> System.out.println("姓名："+e.getName()+",工资是："+e.getSalary()));

        emps.stream().filter(e->e.getDept().getName().equals("研发部"))
                .sorted((a,b)->(int)(b.getSalary()-a.getSalary()))
                .forEach(e-> System.out.println("姓名："+e.getName()+",工资是："+e.getSalary()+"，部门是："+e.getDept().getName()));


        emps.stream().map(e->e.getDept().getName())
                .distinct()
                .forEach(System.out::println);


        Double max=emps.stream().map(e->e.getSalary())
                .max((a,b)->(int)(a-b))
                .get();
        System.out.println(max);

        Double min=emps.stream().map(e->e.getSalary())
                .min((a,b)->(int)(a-b))
                .get();
        System.out.println(min);

        double sum=emps.stream().map(e->e.getSalary())
                .reduce((a,b)->a+b)
                .get();
        long count=emps.stream().count();
        System.out.println("平均工资："+sum/count);



        emps.stream().map(e->"wbs_"+e.getName())
                .forEach(System.out::println);


    }

    public static List<Emp2> queryAll(){
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        List<Emp2> emps=new ArrayList<>();
        try {
            conn= JDBCUtil.getConnection();
            String sql=new StringBuffer()
                    .append(" select e.id,e.name,e.salary,d.id,d.name ")
                    .append(" from t_emp2 e ")
                    .append(" left join t_dept2 d ")
                    .append(" on e.dept_id=d.id ")
                    .toString();
            ps=conn.prepareStatement(sql);
            rs=ps.executeQuery();
            while(rs.next()){
                Emp2 emp=new Emp2();
                emp.setId(rs.getInt("id"));
                emp.setName(rs.getString("name"));
                emp.setSalary(rs.getDouble("salary"));

                //准备一个Dept2对象，接收结果集进行映射
                Dept2 dept=new Dept2();
                dept.setId(rs.getInt("d.id"));
                dept.setName(rs.getString("d.name"));

                emp.setDept(dept);
                emps.add(emp);
            }

        } catch (DataAccessException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return emps;
    }
}
